package com.xx.doublexchat.common.chat.service.strategy.msg;

import com.xx.doublexchat.common.common.exception.CommonErrorEnum;
import com.xx.doublexchat.common.common.utils.AssertUtils;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * 消息处理工厂 ---> 由于消息种类很多所以采用策略模式+工厂模式
 */
@Component
public class MsgHandlerFactory {

    //策略实现类集合
    private static final Map<Integer, AbstractMsgHandler<?>> STRATEGY_MAP = new HashMap<>();

    //注册方法
    public static void register(Integer code, AbstractMsgHandler<?> msgHandler) {
        // code为消息的类型，根据不同类型的code进行不同的策略方法
        STRATEGY_MAP.put(code, msgHandler);
    }

    //获取对应的策略方法
    public static AbstractMsgHandler<?> getStrategyNoNull(Integer code) {
        AbstractMsgHandler<?> strategy = STRATEGY_MAP.get(code);
        AssertUtils.isNotEmpty(strategy, CommonErrorEnum.PARAM_INVALID);
        return strategy;
    }
}
